/**
 * Copyright  2025, Hai Yue Xing He  ZHAO LIMIN
 *
 * @author              ZHAO LIMIN
 * @version             1.0.1
 * @since               2025-04
 * DeveloperError.ts    异常类，用于处理异常情况。
 *                      用于处理异常情况，如参数错误、数据错误、逻辑错误等。
 * 构造一个异常对象，该对象是由于开发人员错误而引发的，例如无效参数，
 * 参数超出范围，等等。此异常只应在开发过程中抛出；
 * 它通常表示调用代码中存在错误。此异常绝不能
 * 被捕获；相反，调用代码应该努力不生成它。
 * <br /><br />
 * 另一方面，a {@link RuntimeError}表示可能发生的异常
 * 在运行时被抛出，例如，由于内存不足，调用代码应做好准备
 * 捕捉。
 */
export class DeveloperError extends Error {
  /**
   *
   * @alias DeveloperError
   * @constructor
   * @extends Error
   *
   * @param {string} [message] The error message for this exception.
   *
   * @see RuntimeError
   */
  constructor(message: string) {
    super(message)
    this.name = 'DeveloperError'
    /**
     * The explanation for why this exception was thrown.
     * @type {string}
     * @readonly
     */
    this.message = message
    try {
      throw new Error()
    } catch (error) {
      if (error instanceof DeveloperError) {
        console.error('捕获到自定义错误:', error.message)
      } else {
        console.error('发生错误:', error)
      }
    }
  }
  /**
   *
   * @returns {string}
   */
  public toString(): string {
    const str = `${this.name}: ${this.message}`
    return str
  }

  /**
   * @private
   */
  public static throwInstantiationError(): DeveloperError {
    throw new DeveloperError(
      'This function defines an interface and should not be called directly.',
    )
  }
}
